home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / make / icmake-6.000 / icmake-6 / icmake / examples / idir < prev    next >
Encoding:
Text File  |  1994-02-08  |  1.8 KB  |  111 lines

  1. #!/usr/local/bin/icmake -qi
  2.  
  3. /*
  4.     Example of the Icmake 'stat()' function. This simple makefile prints
  5.     something of a directory listing.
  6.     
  7.     For installation: see the sample file 'tolower'.
  8. */
  9.  
  10. int stringlength (string s)
  11. {
  12.     int
  13.         len;
  14.         
  15.     len = 0;
  16.     while (element (len, s))
  17.         len++;
  18.         
  19.     return (len);
  20. }
  21.  
  22. void showatt (string file, list statbuf)
  23. {
  24.     int
  25.         i,
  26.         att;
  27.     string
  28.         size;
  29.         
  30.     printf ("    ");
  31.     att  = (int) element (0, statbuf);
  32.     
  33.     if (att & S_IFDIR)
  34.         printf ("d");
  35.     else
  36.         printf ("-");
  37.         
  38.     if (att & S_IFCHR)
  39.         printf ("c");
  40.     else
  41.         printf ("-");
  42.         
  43.     if (att & S_IFREG)
  44.         printf ("f");
  45.     else
  46.         printf ("-");
  47.         
  48.     if (att & S_IREAD)
  49.         printf ("r");
  50.     else
  51.         printf ("-");
  52.         
  53.     if (att & S_IWRITE)
  54.         printf ("w");
  55.     else
  56.         printf ("-");
  57.         
  58.     if (att & S_IEXEC)
  59.         printf ("x");
  60.     else
  61.         printf ("-");
  62.         
  63.     size = element (1, statbuf);
  64.     printf ("   " , size, " ");
  65.     for (i = stringlength (size); i < 10; i++)
  66.         printf (" ");
  67.     printf (file, "\n");
  68. }
  69.  
  70. void show (string filemask)
  71. {
  72.     list
  73.         statbuf,
  74.         files;
  75.     string
  76.         file;
  77.     int
  78.         i;
  79.         
  80.     printf ("\n", filemask, ": "); 
  81.     if (! (files = makelist (O_ALL, filemask)) )
  82.     {
  83.         printf ("not found\n");
  84.         return;
  85.     }
  86.     printf ("\n");
  87.     
  88.     for (i = 0; i < sizeof (files); i++)
  89.     {
  90.         file = element (i, files);
  91.         if (! (statbuf = stat (P_NOCHECK, file)))
  92.             printf ("    can't stat ", file, "\n");
  93.         else
  94.             showatt (file, statbuf);
  95.     }
  96. }
  97.  
  98. void main (int argc, list argv)
  99. {
  100.     int
  101.         i;
  102.         
  103.     if (argc == 1)
  104.         show ("*");
  105.     else
  106.         for (i = 1; i < sizeof (argv); i++)
  107.             show (element (i, argv));
  108.             
  109.     exit (0);
  110. }
  111.